package com.eonmind.ai.dto;

import com.eonmind.common.contract.data.request.PageRequest;
import com.eonmind.common.contract.enums.ai.ConversationTypeEnum;
import com.eonmind.common.contract.timer.Timer;
import com.mongoplus.annotation.ID;
import com.mongoplus.enums.IdTypeEnum;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;

/**
 * 聊天Dto
 *
 * @author Xujie
 * @since 2025/5/6 21:17
 **/

public class AiChatDto {
    @Data
    @ToString
    public static class AiChatRequest {
        /**
         * 会话id
         */
        @NotNull(message = "会话id不能为空")
        private Long conversationId;

        /**
         * 模型id
         */
        @NotNull(message = "模型id不能为空")
        private Long modelId;

        /**
         * 消息内容
         */
        @NotBlank(message = "消息内容不能为空")
        private String message;

        /**
         * 助手id
         */
        private Long assistantId;

        /**
         * 自定义系统提示
         */
        private String customSystemPrompt;

        /**
         * 文件列表
         */
        private List<String> fileList;

        /**
         * 模型名称
         */
        @NotBlank(message = "模型名称不能为空")
        private String modelName;

        /**
         * 用户知识库ID
         */
        private Long knowledgeId;
    }

    /**
     * 会话数据
     */
    @Data
    @ToString
    public static class AiChatData {
        /**
         * 消息id
         */
        private String id;
        /**
         * 消息内容
         */
        private String content;

    }

    /**
     * 会话数据
     */
    @Data
    @ToString
    public static class AiConversationData {
        /**
         * 会话id
         */
        private Long id;

        /**
         * 会话类型
         */
        private Integer type = ConversationTypeEnum.AI_CHAT.getCode();

        /**
         * 会话类型名称
         */
        private String typeName = "";

        /**
         * 会话标题
         */
        private String title = "";

        /**
         * 总消耗token
         */
        private Long totalToken = 0L;


        /**
         * 创建时间
         */
        private Long createTime = Timer.currentTimestamp();

        /**
         * 更新时间
         */
        private Long updateTime = Timer.currentTimestamp();

    }

    /**
     * 会话分页请求数据
     */
    @Data
    @ToString
    public static class AiConversationPageRequest {

        /**
         * 关键字查询
         *
         * @mock "默认"
         */
        private String keyword;

        /**
         * 分页信息
         */
        private PageRequest page = new PageRequest();
    }

    /**
     * 创建会话请求
     */
    @Data
    @ToString
    public static class AiConversationCreateRequest {

        /**
         * 话题
         */
        private String title = "默认话题";

        /**
         * 会话类型
         */
        private Integer type = ConversationTypeEnum.AI_CHAT.getCode();
    }

    /**
     * 编辑会话请求
     */
    @Data
    @ToString
    public static class AiConversationEditRequest {
        /**
         * 会话id
         *
         * @mock 1
         */
        private Long id;

        /**
         * 会话标题
         *
         * @mock ""
         */
        private String title = "";
    }

    /**
     * 删除会话请求
     */
    @Data
    @ToString
    public static class AiConversationDelRequest {
        /**
         * 会话id
         *
         * @mock 1
         */
        private Long id;
    }

    /**
     * 模型数据
     */
    @Data
    @ToString
    public static class AiModelData {
        /**
         * 模型id
         */
        private Long id;

        /**
         * 模型名称
         */
        private String modelName;
        /**
         * 模型图标
         */
        private String modelIcon = "";

        /**
         * 模型描述
         */
        private String modelDesc = "";


        /**
         * 模型类型
         */
        private Integer modelType;

        /**
         * 模型类型名称
         */
        private String modelTypeName;

        /**
         * 创建时间
         */
        private Long createTime = Timer.currentTimestamp();

        /**
         * 更新时间
         */
        private Long updateTime = Timer.currentTimestamp();
    }

    /**
     * 会话消息
     */
    @Data
    @ToString
    public static class AiConversationMessageData {
        /**
         * 会话id
         */
        private Long id;


        /**
         * 模型ID
         */
        private Integer modelId = ConversationTypeEnum.AI_CHAT.getCode();

        /**
         * 模型ID
         */
        private String modelName = "";

        /**
         * 信息类型
         * 0:用户 1:AI
         */
        private Integer type = ConversationTypeEnum.AI_CHAT.getCode();


        /**
         * 消息内容
         */
        private String messageContent;

        /**
         * 消息附件列表
         */
        private List<MessageMediaData> messageMediaList = new ArrayList<>();


        /**
         * 创建时间
         */
        private Long createTime = Timer.currentTimestamp();

        /**
         * 更新时间
         */
        private Long updateTime = Timer.currentTimestamp();


        /**
         * 附件信息
         */
        @Data
        public static class MessageMediaData {
            /**
             * id 可以为空
             */
            private String id;
            /**
             * 附件类型
             */
            private String mimeType;
            /**
             * 附件url
             */
            private Object data;
            /**
             * 名称
             */
            private String name;
        }
    }

    /**
     * AI助手
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public static class AiAssistantData {
        /**
         * 助手id
         */
        private Long id;


        /**
         * 助手名称
         */
        private String assistantName = "";

        /**
         * 助手图标，图片url
         */
        private String assistantIcon = "";


        /**
         * 助手prompt
         */
        private String assistantPrompt = "";


        /**
         * 喜欢次数
         */
        private Integer likeCount = 0;


        /**
         * 创建时间
         */
        private Long createTime = Timer.currentTimestamp();

        /**
         * 更新时间
         */
        private Long updateTime = Timer.currentTimestamp();

    }

    /**
     * 模型分类数据
     */
    @Data
    @ToString
    public static class AiModelCategoryData {
        @ID(type = IdTypeEnum.AUTO)
        private Long id;

        /**
         * 分类图标
         */
        private String modelCategoryIcon = "";
        /**
         * 分类名称
         */
        private String modelCategoryName = "";

        /**
         * 分类描述
         */
        private String modelCategoryDesc = "";


    }


    /**
     * 模型分类请求
     */
    @Data
    @ToString
    public static class AiModelCategoryListRequest {

        /**
         * 分类id
         */
        @NotNull
        private Long modelCategoryId;
    }


}
